// @/utils/request.js
import axios from 'axios';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';

const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 10000,
  headers: { 'Content-Type': 'application/json' }
});

// 请求拦截器：携带Token（逻辑不变）
request.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('userToken');
    if (token) config.headers.Authorization = token;
    return config;
  },
  (error) => {
    ElMessage.error('请求参数错误，请检查');
    return Promise.reject(error);
  }
);

// 响应拦截器：区分「业务错误」和「网络/HTTP错误」
request.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 业务成功：返回 data（简化业务代码取值）
    if (res.code == 1) return res;
    // 业务错误：抛给业务代码处理（不在这里弹提示）
    return Promise.reject(res);
  },
  (error) => {
    // 处理「网络/HTTP错误」（如断网、401/404/500）
    let errorMsg = '网络异常，请检查网络连接';
    if (error.response) {
      const status = error.response.status;
      if (status === 401) {
        // Token过期：清空存储 + 跳登录页
        localStorage.removeItem('userToken');
        localStorage.removeItem('currentUser');
        ElMessage.error('登录已过期，请重新登录');
        useRouter().push({
          path: '/login',
          query: { redirect: useRouter().currentRoute.value.fullPath }
        });
      } else if (status === 404) {
        errorMsg = '请求的接口不存在';
      } else if (status === 500) {
        // ✅ 修复：从 error.response.data 中获取 msg
        const resData = error.response.data;
        errorMsg = resData?.msg || '服务器内部错误，请稍后再试';
      } else {
        // 其他HTTP错误：尝试提取后端返回的msg
        const res = error.response.data;
        errorMsg = res.msg || `请求错误（${status}）`;
      }
    }
    ElMessage.error(errorMsg); // 弹全局错误提示
    return Promise.reject(error);
  }
);

export default request;